package com.minio.learning.springminio.service;

import com.minio.learning.springminio.entity.FileInfo;
import com.minio.learning.springminio.entity.FileVO;
import com.minio.learning.springminio.entity.RemoveFailVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author YanXxx
 * @date 2022-12-01 17:29
 */
public interface MinioService {
    /**
     * 创建一个桶
     * @param bucketName bucketName
     */
    boolean createBucket(String bucketName);

    /**
     * 上传一个文件
     * @param bucketName bucketName
     * @param files files
     *
     */
    List<FileVO> uploadFile(String bucketName, MultipartFile[] files);

    /**
     * 列出所有的桶
     *
     */
    List<String> listBuckets();

    /**
     * 列出一个桶中的所有文件和目录
     */
    List<FileInfo> listFiles(String bucketName, String prefix);

    /**
     * 下载一个文件
     */
    void download(String bucketName, String filePath, HttpServletResponse response);

    /**
     * 删除一个桶
     * @param bucketName bucketName
     */
    boolean deleteBucket(String bucketName);

    /**
     * 删除一个对象
     * @param bucketName bucketName
     * @param filePath filePath
     * @return 删除结果
     */
    boolean deleteObject(String bucketName, String filePath);

    /**
     * 删除一个或多个对象
     * @param bucketName bucketName
     * @param filePaths 文件路径
     * @return 删除失败列表
     */
    List<RemoveFailVO> deleteObjects(String bucketName, List<String> filePaths);
}
